#ifndef MAP_HH
#define MAP_HH
#include<iostream>
#include<array>
#include<random>
#include<vector>
#include "locations/classroom.hh"
#include "locations/corridor.hh"
#include "locations/hall.hh"
#include "locations/hidden_specimenRoom.hh"
#include "locations/Lab.hh"
#include "locations/office.hh"

using std::cout;
using std::endl;
using std::string;
using std::array;
using std::vector;

/**
 * @class Map
 * @brief Represents the full game map that manages all locations and transitions.
 *
 * Handles loading, accessing, and navigating between various Location instances.
 */

class Map{
    private:
        array<array<int, 9>, 9> map={0};
        array<array<bool, 9>, 9> map_visited={false};
        array<array<bool, 9>, 9> map_searched={false};

    public:                            //1            2           3           4             5            6
        array<string,6> location_name={"Hall      ","Classroom ","corridor  ","Office    ","Lab       ","Stairwell "};
        string s1="------------------------------------------------------------------------------------------------------------------------------------ ";
        string s2=" :                                                                                                                       |";
        Map& generate_map();
        void show_map() const;
        Map& add_visted(int x,int y);
        Map& add_searched(int x,int y);
        void show_location(int x,int y) ;
        Location* player_location(int x,int y) const;
        vector<char> display_menu(int x,int y);
    };


#endif